/* eslint-disable array-bracket-spacing */
/* eslint-disable no-dupe-class-members */
/* eslint-disable indent */
'use strict'

const Service = require('egg').Service
const dayjs = require('dayjs')

// 信息要返回的字段
const attributes = ['id', 'pid', 'name', 'conf', 'background']

class SeatService extends Service {

    // 查询所有列表
    async getSeatList(params) {
        const { model, helper } = this.ctx
        const currentPage = params?.pageIndex ?? 1
        const pageSize = params?.pageSize ?? 50
        const { Op } = require('sequelize')
        const where = {}
        if (params.name) {
            where.name = {
                [Op.like]: `%${params.name}%`
            }
        }
        if (params.pid !== undefined && params.pid != null) {
            where.pid = params.pid
        }

        return await model.Seat.findAndCountAll({
            where,
            offset: (currentPage - 1) * pageSize, // 计算分页偏移量
            limit: pageSize,
            attributes,
            include: [
                {
                    model: model.Place,
                    // as: 'place',
                    attributes: ['barname', 'barcode']
                }
            ]
        })
            .then(async result => {
                if (result) {
                    return {
                        list: result.rows,
                        total: result.count
                    }
                }
                helper.failed(1008, null, '查询机位图列表失败')
                return false
            })
            .catch(async error => {
                if (error?.original?.sqlMessage) {
                    // logger.error(`更新游戏信息失败   barcode:[${params.barcode}]   ${error?.original?.sqlMessage}`)
                    helper.failed(1001, null, error?.original?.sqlMessage)
                } else if (error?.errors[0]?.message) {
                    // logger.error(`更新游戏信息失败   barcode:[${params.barcode}]    ${error.errors[0]?.message}`)
                    helper.failed(1001, null, error.errors[0]?.message)
                } else {
                    // logger.error(`更新游戏信息失败   barcode:[${params.barcode}]   ${JSON.stringify(error)}`)
                    helper.failed(1001, null, JSON.stringify(error))
                }
                return false
            })
    }

    // 新增机位图
    async createSeat(params) {
        const { model, helper } = this.ctx
        const { pid, name, conf, background } = params

        return await model.Seat.create({
            pid,
            name,
            conf,
            background,
            created_at: dayjs().format('YYYY-MM-DD HH:mm:ss'),
            updated_at: dayjs().format('YYYY-MM-DD HH:mm:ss')
        })
            .then(async data => {
                if (data) {
                    return data
                }
                helper.failed(1005, null, '新增机位图配置失败')
                return false
            })
            .catch(async error => {
                if (error?.original?.sqlMessage) {
                    // logger.error(`更新游戏信息失败   barcode:[${params.barcode}]   ${error?.original?.sqlMessage}`)
                    helper.failed(1001, null, error?.original?.sqlMessage)
                } else if (error?.errors[0]?.message) {
                    // logger.error(`更新游戏信息失败   barcode:[${params.barcode}]    ${error.errors[0]?.message}`)
                    helper.failed(1001, null, error.errors[0]?.message)
                } else {
                    // logger.error(`更新游戏信息失败   barcode:[${params.barcode}]   ${JSON.stringify(error)}`)
                    helper.failed(1001, null, JSON.stringify(error))
                }
                return false
            })
    }

    // 编辑机位图
    async editSeat(params) {
        const { model, helper } = this.ctx

        return await model.Seat.findByPk(params.id)
            .then(async result => {
                if (result) {
                    delete params.id
                    return await result.update(params)
                        .then(async data => {
                            if (data) {
                                return data
                            }
                            helper.failed(1006, null, '编辑桌面配置失败')
                            return false
                        })
                        .catch(async error => {
                            if (error?.original?.sqlMessage) {
                                // logger.error(`更新游戏信息失败   barcode:[${params.barcode}]   ${error?.original?.sqlMessage}`)
                                helper.failed(1001, null, error?.original?.sqlMessage)
                            } else if (error?.errors[0]?.message) {
                                // logger.error(`更新游戏信息失败   barcode:[${params.barcode}]    ${error.errors[0]?.message}`)
                                helper.failed(1001, null, error.errors[0]?.message)
                            } else {
                                // logger.error(`更新游戏信息失败   barcode:[${params.barcode}]   ${JSON.stringify(error)}`)
                                helper.failed(1001, null, JSON.stringify(error))
                            }
                            return false
                        })
                }
                helper.failed(1004, null, '桌面配置不存在')
                return false
            })
            .catch(async error => {
                if (error?.original?.sqlMessage) {
                    // logger.error(`更新游戏信息失败   barcode:[${params.barcode}]   ${error?.original?.sqlMessage}`)
                    helper.failed(1001, null, error?.original?.sqlMessage)
                } else if (error?.errors[0]?.message) {
                    // logger.error(`更新游戏信息失败   barcode:[${params.barcode}]    ${error.errors[0]?.message}`)
                    helper.failed(1001, null, error.errors[0]?.message)
                } else {
                    // logger.error(`更新游戏信息失败   barcode:[${params.barcode}]   ${JSON.stringify(error)}`)
                    helper.failed(1001, null, JSON.stringify(error))
                }
                return false
            })
    }

    // 删除机位图
    async deleteSeat(params) {
        const { model, helper } = this.ctx

        return await model.Seat.findByPk(params.id)
            .then(async result => {
                if (result) {
                    return await result.destroy()
                        .then(async data => {
                            if (data) {
                                return data
                            }
                            helper.failed(1007, null, '删除机位图配置失败')
                            return false
                        })
                        .catch(async error => {
                            if (error?.original?.sqlMessage) {
                                // logger.error(`更新游戏信息失败   barcode:[${params.barcode}]   ${error?.original?.sqlMessage}`)
                                helper.failed(1001, null, error?.original?.sqlMessage)
                            } else if (error?.errors[0]?.message) {
                                // logger.error(`更新游戏信息失败   barcode:[${params.barcode}]    ${error.errors[0]?.message}`)
                                helper.failed(1001, null, error.errors[0]?.message)
                            } else {
                                // logger.error(`更新游戏信息失败   barcode:[${params.barcode}]   ${JSON.stringify(error)}`)
                                helper.failed(1001, null, JSON.stringify(error))
                            }
                            return false
                        })
                }
                helper.failed(1004, null, '机位图配置不存在')
                return false
            })
            .catch(async error => {
                if (error?.original?.sqlMessage) {
                    // logger.error(`更新游戏信息失败   barcode:[${params.barcode}]   ${error?.original?.sqlMessage}`)
                    helper.failed(1001, null, error?.original?.sqlMessage)
                } else if (error?.errors[0]?.message) {
                    // logger.error(`更新游戏信息失败   barcode:[${params.barcode}]    ${error.errors[0]?.message}`)
                    helper.failed(1001, null, error.errors[0]?.message)
                } else {
                    // logger.error(`更新游戏信息失败   barcode:[${params.barcode}]   ${JSON.stringify(error)}`)
                    helper.failed(1001, null, JSON.stringify(error))
                }
                return false
            })
    }

    // 请求门店当前使用的机位图数据
    async getSeat(params) {
        const { model, helper } = this.ctx
        const { pid } = params

        const where = {
            pid
        }
        return await model.Seat.findOne({
            where,
            attributes,
            include: [
                {
                    model: model.Place,
                    as: 'place',
                    attributes: ['barname', 'barcode']
                }
            ]
        })
            .then(async result => {
                if (result) {
                    return result
                }
                helper.failed(1002, null, '查询机位图配置信息错误')
                return false
            })
            .catch(async error => {
                if (error?.original?.sqlMessage) {
                    // logger.error(`更新游戏信息失败   barcode:[${params.barcode}]   ${error?.original?.sqlMessage}`)
                    helper.failed(1001, null, error?.original?.sqlMessage)
                } else if (error?.errors[0]?.message) {
                    // logger.error(`更新游戏信息失败   barcode:[${params.barcode}]    ${error.errors[0]?.message}`)
                    helper.failed(1001, null, error.errors[0]?.message)
                } else {
                    // logger.error(`更新游戏信息失败   barcode:[${params.barcode}]   ${JSON.stringify(error)}`)
                    helper.failed(1001, null, JSON.stringify(error))
                }
                return false
            })
    }
}

module.exports = SeatService
